//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see http://www.gnu.org/licenses/.
//

#ifndef MOBISENSE_H_
#define MOBISENSE_H_

#include <OverlayKey.h>
#include <BaseOverlay.h>

#include <string>

#include "BoundaryList.h"
#include "MobiSenseBrokerMessage_m.h"
#include "MobiSenseAppMessage_m.h"
#include "CommonMessages_m.h"

#include "Pastry.h"

class MobiSense : public Pastry {
public:
	virtual ~MobiSense();

protected:

	virtual void initializeOverlay( int stage );

	virtual void changeState(int toState);

	void handleBrokerPkt(MobiSenseBrokerPkt* msg);

	void handleBrokerLBMulcast(MobiSenseBrokerLBMulticastPkt* msg);
	void handleBrokerLBUnicast(MobiSenseBrokerLBUnicastPkt* msg);
	//void handleBrokerIDMulticast(MobiSenseBrokerIDMulticastPkt* msg);

	virtual void  handleAppMessage (cMessage *msg);

	void callDeliver( BaseOverlayMessage* msg, const OverlayKey& destKey);

private:

	const OverlayKey& findLevelNode(int level);


	std::string boundaries;
	BoundaryList *bl;

};

#endif /* MOBISENSE_H_ */
